package co.gov.das.fotogps.movil;

import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.AlertType;
import javax.microedition.lcdui.Display;
import javax.microedition.location.Criteria;
import javax.microedition.location.Location;
import javax.microedition.location.LocationException;
import javax.microedition.location.LocationProvider;
import javax.microedition.location.QualifiedCoordinates;


// <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
// #[regen=yes,id=DCE.2D7BBCCD-F664-9447-9CA1-B7994D4F9182]
// </editor-fold> 
public class GPS {

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.384CF197-5E4F-F868-EE16-6A8CA2C2F781]
    // </editor-fold> 
    private double latitud;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.AE6885CB-6F01-5EEB-5C08-7DCB74021064]
    // </editor-fold> 
    private double longitud;
       // Coordenadas de la última posición consultada
    private QualifiedCoordinates lastCoord;
    private final FotoGPSMIDLet midlet;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.53DD7F60-35FF-0331-C44D-A3DF5079CC69]
    // </editor-fold> 
    public GPS (FotoGPSMIDLet midlet) {
        this.midlet = midlet;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.F855C013-D230-1CE4-C8AD-03B7BEEAD2A0]
    // </editor-fold> 
    public double getLatitud () {
        return latitud;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.B5A8851F-7AC6-9CBA-D84D-93E3B83B424E]
    // </editor-fold> 
    public void setLatitud (double val) {
        this.latitud = val;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.100D259A-20FE-82A9-B728-5B79F27BCE40]
    // </editor-fold> 
    public double getLongitud () {
        return longitud;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.570B82D4-363E-4BA3-BF17-C496AC1E0DB5]
    // </editor-fold> 
    public void setLongitud (double val) {
        this.longitud = val;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.B74A2A7C-375C-6B25-41E5-36585EE7C4E0]
    // </editor-fold> 
    public double[] obtenerCoordenadas () {
        try {
            // Establecemos los criterios del proveedor de localizacion deseado.
            Criteria criteria = new Criteria();
            // No queremos usar un proveedor de pago
            criteria.setCostAllowed(false);
            criteria.setHorizontalAccuracy(500);
            // Nos gustaría que el proveedor además de longitud y latitud nos diera
            // información sobre la calle, país, ciudad, etc. en la que me encuentro.
            criteria.setAddressInfoRequired(false);
            // Quiero datos de velocidad
            criteria.setSpeedAndCourseRequired(false);
            // Solicitamos el proveedor de localización
            LocationProvider provider = LocationProvider.getInstance(criteria);
            if (provider != null) {
                try {
                    // Método bloqueante
                    Location location = provider.getLocation(60);
                    // Si hay datos de localización continuamos ponemos un timer
                    // que nos de los datos de localizacion cada 5 segundos (llamará
                    // al método locationUpdated)
                    if (location != null) {
                        this.lastCoord = location.getQualifiedCoordinates();
                        // LocationListener, interval, timeout, maxAge)
                        //                    provider.setLocationListener(this, 5, -1, -1);
                    }
                    //this.providerStateChanged(provider, provider.getState());
                } catch (java.lang.InterruptedException ex) {
                    Alert alert = new Alert("Error", "Error de posicionamiento " + ex.getMessage(), null, null);
                    Display.getDisplay(midlet).setCurrent(alert, midlet.getFormFotografia());
                }
            }
            double[] coordenadas = new double[]{lastCoord.getLatitude(), lastCoord.getLongitude()};
            latitud = lastCoord.getLatitude();
            longitud = lastCoord.getLongitude();
            return coordenadas;
        } catch (LocationException ex) {
            Alert alert = new Alert("Error", "Error de posicionamiento " + ex.getMessage(), null, null);
            Display.getDisplay(midlet).setCurrent(alert, midlet.getFormFotografia());
            return new double[]{0.0,0.0};
        }
     }


    public void providerStateChanged(LocationProvider arg0, int arg1) {
   }

}

